﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Z2102WinForms
{
    public partial class MainFrom : Form
    {
        //*************************重要说明**********************************************************
        //第1章-第5章为基本技能训练（平时成绩考核依据，具体要求详见各章习题和附录A）
        //第6章-第10章为实战技术训练（小组课程设计），具体要求详见附录B）
        //*******************************************************************************************
        private readonly string[] menu = [
            "HelloWorld Console",
            "HelloWorld WinForms",
            "* 第1次：第2章结束后提交",
            "第1章习题6-简答题",
            "第2章习题6-简答题",
            "上机练习1-格式化输出",
            "上机练习2-字符显示",
            "上机练习3-字符串处理",
            "综合实验2-密码显示",

            "* 第2次：第3章结束后累加提交",
            "第3章习题1-简答题",
            "第3章习题3-简答题",
            "上机练习4-字母判断",
            "上机练习5-类型转换",
            "上机练习6-数组排序和计算",
            "综合实验3-字符提取",
            "综合实验4-求完数",

            "* 第3次：第4章结束后累加提交",
            "第4章习题4-简答题",
            "上机练习7-循环语句",
            "上机练习8-类和对象",
            "上机练习9-属性和方法",
            "上机练习10-类继承-构造函数",
            "综合实验5-随机抽号",
            "综合实验6-限时答题",

            "* 第4次：第5章结束后累加提交",
            "第5章习题4-简答题",
            "上机练习11-类继承-虚拟和重写",
            "上机练习12-随机数",
            "上机练习13-泛型列表",
            "上机练习14-界面交互",
            "上机练习15-文本文件读写",
            "综合实验7-数据库操作",
            "综合实验8-端口监听"
        ];
        private Form? fm = null;

        public MainFrom()
        {
            InitializeComponent();
            InitPanel1Controls();
        }

        private void InitPanel1Controls()
        {
            for (int i = 0; i < menu.Length; i++)
            {
                if (menu[i].StartsWith("*"))
                {
                    var label = new Label()
                    {
                        Location = new Point(10, 10 + i * 30),
                        Text = menu[i],
                        AutoSize = true,
                        Font = new Font("宋体", 12, FontStyle.Bold)
                    };
                    splitContainer1.Panel1.Controls.Add(label);
                    continue;
                }
                var linkLabel = new LinkLabel()
                {
                    Location = new Point(10, 10 + i * 30),
                    Text = menu[i],
                    Margin = new Padding(10, 3, 10, 3),  //左、上、右、下
                    MinimumSize = new Size(280, 20)
                };
                linkLabel.Click += LinkLabel_Click;
                splitContainer1.Panel1.Controls.Add(linkLabel);
            }
            this.IsMdiContainer = true;

            //this.StartPosition = FormStartPosition.CenterScreen;
            this.WindowState = FormWindowState.Maximized;
        }

        private void LinkLabel_Click(object? sender, EventArgs e)
        {
            foreach (var form in splitContainer1.Panel2.Controls)
            {
                if (form is Form form1)
                {
                    form1?.Close();
                }
            }
            fm = null;
            if (sender is LinkLabel linkLabel)
            {
                switch (linkLabel.Text)
                {
                    case "HelloWorld Console":
                        Program.ExecConsoleApp("Z2102Console.LX.HelloWorld");
                        break;
                    case "HelloWorld WinForms":
                        fm = new LX.HelloWorld();
                        break;
                    //
                    //注意：未按时提交作业、上机练习和实验的，即使最后全部补交，也仍然会扣分。
                    //
                    //第1次：第2章结束后提交
                    case "第1章习题6-简答题":
                        fm = new XT.Form1();
                        break;
                    case "第2章习题6-简答题":
                        fm = new XT.Form2();
                        break;
                    case "上机练习1-格式化输出":
                        fm = new LX.Form1();
                        break;
                    case "上机练习2-字符显示":
                        fm = new LX.Form2();
                        break;
                    case "上机练习3-字符串处理":
                        fm = new LX.Form3();
                        break;
                    case "综合实验2-密码显示":
                        fm = new SY.Form1();
                        break;
                    //第2次：第3章结束后“累加提交”同一个解决方案
                    case "第3章习题1-简答题":
                        fm = new XT.Form3();
                        break;
                    case "第3章习题3-简答题":
                        fm = new XT.Form4();
                        break;
                    case "上机练习4-字母判断":
                        fm = new LX.Form4();
                        break;
                    case "上机练习5-类型转换":
                        fm = new LX.Form5();
                        break;
                    case "上机练习6-数组排序和计算":
                        fm = new LX.Form6();
                        break;
                    case "综合实验3-字符提取":
                        fm = new SY.Form2();
                        break;
                    case "综合实验4-求完数":
                        fm = new SY.Form3();
                        break;
                    //第3次：第4章结束后“累加提交”同一个解决方案
                    case "第4章习题4-简答题":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习7-循环语句":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习8-类和对象":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习9-属性和方法":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习10-类继承-构造函数":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "综合实验5-随机抽号":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "综合实验6-限时答题":
                        fm = new Form1(linkLabel.Text);
                        break;
                    //第4次：第6章结束后“累加提交”同一个解决方案
                    case "第5章习题4-简答题":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习11-类继承-虚拟和重写":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习12-随机数":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习13-泛型列表":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习14-界面交互":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "上机练习15-文本文件读写":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "综合实验7-数据库操作":
                        fm = new Form1(linkLabel.Text);
                        break;
                    case "综合实验8-端口监听":
                        fm = new Form1(linkLabel.Text);
                        break;
                    //
                    //从第6章开始进入课程设计环节，课程设计具体要求见附录B
                    //注意：小组完成的课程设计要求同时提交源程序和电子版文档，两者缺一不可。
                    //
                    default: return;
                }
                if (fm != null)
                {
                    fm.FormBorderStyle = FormBorderStyle.Sizable;
                    fm.MdiParent = this;
                    fm.Parent = splitContainer1.Panel2;
                    fm.StartPosition = FormStartPosition.Manual;
                    fm.Location = splitContainer1.Panel2.Location;
                    fm.Left = (splitContainer1.Panel2.Width - fm.Width) / 2;
                    fm.Top = (splitContainer1.Panel2.Height - fm.Height) / 2;
                    fm.Show();
                }
            }
        }
    }
}
